#ifndef MUSICPLAYERWIDGET_H
#define MUSICPLAYERWIDGET_H

#include <QWidget>
#include <QLabel>
#include <QSlider>
#include <QMediaPlayer>
#include <QList>
#include <QJsonObject>
#include <QMovie>

// 歌词行结构体：时间（毫秒）+ 文本
struct LrcLine {
    qint64 timeMs;      // 歌词对应的播放时间（毫秒）
    QString content;    // 歌词内容
};

// 歌曲信息结构体：包含歌词JSON文件路径
struct SongInfo {
    QString name;       // 歌名
    QString artist;     // 歌手
    QString filePath;   // 音频文件路径
    QString lyricPath;  // 歌词JSON文件路径（新增：存储歌词文件路径）
};

class MusicPlayerWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MusicPlayerWidget(QWidget *parent = nullptr);

    // 设置歌曲列表（外部调用初始化播放器）
    void setSongList(const QList<SongInfo>& list);

private slots:
    // 播放控制
    void onPrevSong();
    void onPlayPause();
    void onNextSong();

    // 播放器状态与进度更新
    void onPositionChanged(qint64 position);
    void onDurationChanged(qint64 duration);
    void onProgressDragged(int position);

protected:
    // 重写鼠标点击事件（处理QLabel按钮点击）
    void mousePressEvent(QMouseEvent *event) override;

private:
    // UI组件
    QLabel *m_gifLabel;         // 左上角GIF
    QLabel *m_songNameLabel;    // 歌名
    QLabel *m_artistLabel;      // 歌手
    QLabel *m_lyricLabel;       // 歌词显示
    QSlider *m_progressSlider;  // 进度条
    QLabel *m_prevBtn;          // 上一首按钮
    QLabel *m_playBtn;          // 播放/暂停按钮
    QLabel *m_nextBtn;          // 下一首按钮
    
    QMovie *m_movie;

    // 核心功能组件
    QMediaPlayer *m_player;             // 音频播放器
    QList<SongInfo> m_songList;         // 歌曲列表  基于动态数组的容器
    int m_currentIndex;                 // 当前播放索引
    QList<LrcLine> m_currentLrcList;    // 当前歌曲的歌词列表

    // 歌词解析与更新
    QString readLyricFromFile(const QString& filePath); // 从文件读取歌词JSON
    void parseLyricJson(const QString& jsonStr);        // 解析歌词JSON
    void updateCurrentLyric(qint64 position);           // 根据播放进度更新歌词

    // 辅助方法
    void switchSong(int index);  // 切换到指定歌曲
};

#endif // MUSICPLAYERWIDGET_H
